define('verify', function(require, exports, module) {
	var localVerifycode,
		VerityTel,
		VerityErrorCount = 0,
		smsTime,
		curCount,
		localError,
		InterValObj,
		SetRemainTime,
		btn,
		msgTimer, //消息提示句柄
		callback = function(rs) {
			if(rs.retcode && rs.retcode != '0') {
				btn.removeAttr("disabled").val("重新发送");
				return;
			}
			curCount = 60;
			btn.val(curCount + "秒");
			InterValObj = window.setInterval(SetRemainTime, 1000); //启动计时器，1秒执行一次
		},
		SetRemainTime = function() {
			if(curCount == 0) {
				window.clearInterval(InterValObj); //停止计时器
				btn.removeAttr("disabled").val("重新发送"); //启用按钮
			} else {
				curCount--;
				btn.val(curCount + "秒");
			}
		},
		d;
	d = {
		send: function(mobile, code, $btn) {
			var time = new Date(),
				code,
				str;
			//			if(!smsTime||!localVerifycode||time-smsTime>300000){
			//	    	   code=createVerifycode(6);
			//	    	   smsTime=time;
			//	    	   localVerifycode=code;
			//	    	}else{
			//	    	   code=localVerifycode;
			//	    	}
			//	    	str='您的验证码：'+code;
			VerityTel = mobile;
			btn = $btn;
			btn.val("发送中…").attr("disabled", "true");
			require('api').sendSMS({
				mobile: mobile,
				code: code,
				content: str,
				error:function(){
					btn.removeAttr("disabled").val("重新发送"); //启用按钮
				},
				callback: callback
			});
		},
		valid: function(mobile, verifycode) {
			var error = false;
			if(localVerifycode !== verifycode) {
				if(VerityErrorCount < 10) {
					error = "请输入正确的验证码！";
				} else {
					error = "验证码输入错误10次,请再次获取验证码！";
					localVerifycode = null;
				}
				VerityErrorCount++;
			} else if(VerityTel != mobile) {
				error = "更换手机号码后请再次获取的验证码！";
			}
			if(error) {
				localError = error;
				return false;
			} else {
				localError = false;
				VerityErrorCount = 0;
				return true;
			}
		},
		getError: function() {
			return localError;
		},
		refresh: function() {
			smsTime = null;
		}
	}
	return d;
});
define(['verify'], function(Verify) {
	var urls = {
			'quotation':0, //行情
			'login':1, // 登录
			'channels':2, // 银行通道
			'holdOrders':3, //持仓查询
			'queryGoodHold':3,//持仓汇总	
			'user':4, //用户资金信息
			'ltGoodsNewest':5, //最新挂单买卖数量价格获取 cgi-bin/zl_cgi?c=5&goodscode=000003&direct=b b 挂单买入 s 挂单卖出
			'wxavatar':8, //微信头像地址
			'captcha': 9, //获取图形验证码
			'sms': 10, //获取短信验证码
			'pwdCheck': 11,// 核对短信验证码
			'resetPwd': 12, // 找回密码
			'changePwd': 13, // 修改密码
			'register': 14, // 注册提交
			'privinces':15,//省份和城市
			'banks': 16, // 银行种类
			'charge':17,//充值
			'cash':18,//提现
			'bind':19,//绑卡
			'unbind':20, //解绑银行卡
			'ltOrdersHis':21,//历史委托单（挂单查询）
			'tradesHis': 22, //成交单历史
			'fundFlowHistory':23,//资金流水
			'group':25, // 商品组
			'subscription':26, // 当前认购商品（申购）
			'subscriptionHis':27, // 历史认购商品（申购）
			'noticesLogin':28, // 公告列表
			'notice':29, // 单一公告
			'customer':30, //客户信息
			'articleList':31, //交易规则
			'quotations':32, //批量行情
			'loginOut':33,//退出登录,
			'fundFlow':34,//当日资金流水,
			'notices':35, //
			'slgoodsCount':36, //认购商品统计信息
			'createLtOrder':37, //挂单买入
			'sellLtOrder':38, //挂单卖出
			'createLtOrderCater':39, //应价买入
			'sellOrderCater':40, //应价卖出
			'cancelLtOrder':41, //撤销挂单
			'createSlOrder':42, //认购
			'goods':44, // 商品列表（不用登录）
			'ltOrders':45,//当日委托单（当日挂单查询）
			'userCore':46, //用户基础信息
			'trades': 47, //成交单当前
            'appid': 48, //获取APPID
            'wxid': 49, //获取微信ID
			'allowFund':50, // 可用资金（提现）
//			'flashsaleQuery':51, //查询抢购计划
			'flashsale':52, //抢购请求
			'qrcode':53, //获取公众号二维码 cgi-bin/zl_cgi?c=53&wxdomain=
			'ltsellCount':54, //应价卖出可买数据查询
			'ltbuyCount':54, //应价买入可买数据查询  b 应价买入 s 应价卖出,/cgi-bin/zl_cgi?c=54&goodscode=666002&direct=b
			'wxshare':55,//微信分享
			'commission':56//佣金分成
			,'transferSub':57//定向交易申请
		},
		errors = {
			'-1': '未知错误',
			'-2': '获得配置文件出错',
			'-3': '数据库初始化失败',
			'-4': '数据库连接超时',
			'-5': '消息未注册',
			'-6': '未找到配置文件',
			'-7': '数据库开启事务失败',
			'-8': '数据库提交事务失败',
			'-9': '系统类型不一致',
			'-1000': '与交易服务链接失败或超时，请刷新再试',
			'-1001': '连接初始化不成功',
			'-1002': '连接开始不成功',
			'-1003': '连接销毁不成功',
			'-2000': '客户端初始化出错',
			'-2001': '服务端初始化出错',
			'-2002': '用户未登录',
			'-2004': '不支持的功能号',
			'-2005': '发送数据错误',
			'-2006': '登录服务没有启动',
			'-3000': '消息解析错误',
			'-3001': '数据库执行超时',
			'-3002': '数据库执行结果集为空',
			'-3003': '数据库缺少字段',
			'-3004': '登录密码不正确',//'未找到客户信息',
			'-3005': '数据库访问超时',
			'-3006': '单据无效',
			'-3007': '交易权限受限',
			'-3008': '操作类型不存在',
			'-3010': '未找到商品信息',
			'-3011': '未找到规则组信息',
			'-3012': '止损或获利无效',
			'-3013': '超过单笔最大交易数量',
			'-3014': '市价已变',
			'-3015': '超过用户设定范围',
			'-3016': '生成单据流水号超时',
			'-3017': '超过最大持仓数量限制',
			'-3018': '用户可用资金不足够',
			'-3019': '单据已存在',
			'-3020': '单据不存在',
			'-3021': '市场休市',
			'-3022': '商品休市',
			'-3023': '未找到支付通道',
			'-3024': '非签约、解约时间段，禁止签约、解约',
			'-3025': '非入金时间段，禁止入金',
			'-3026': '非出金时间段，禁止出金',
			'-3027': '支付通道不支持交易端发起此接口',
			'-3028': '支付通道不支持签约、解约',
			'-3029': '账户已签约，禁止重复签约',
			'-3030': '账户已解约，禁止重复解约',
			'-3031': '银行账户不正确',
			'-3032': '证件号码不正确',
			'-3033': '资金密码不正确',
			'-3034': '账户不符合签约解约条件，请检查账户资金，单据信息',
			'-3035': '字段类型转化出错',
			'-3036': 'TableLog更新失败',
			'-3037': '出入金金额溢出',
			'-3038': '账户未签约，禁止出入金',
			'-3039': '出入金金额超过每日出金限制或小于每笔出金限制',
			'-3041': '出入金状态不符合规范',
			'-3042': '出入金单据已被审核',
			'-3043': '未返回相应的银行流水号',
			'-3044': '限价无效',
			'-3045': '效力类型不存在',
			'-3046': '未找到相应交易端流水号出入金单据信息',
			'-3047': '未找到相应银行流水号出入金单据信息',
			'-3048': '银行或出入金服务流水号重复',
			'-3049': '无效的交易日',
			'-3050': '改单价格小于冻结点差',
			'-3051': '支付通道不支持银行端发起此接口',
			'-3052': '支付通道不支持出入金类型',
			'-3053': '支付通道商务号不存在',
			'-3054': '席位号不存在',
			'-3055': '禁止交易',
			'-3056': '禁止买入',
			'-3057': '禁止卖出',
			'-3058': '禁止开仓',
			'-3059': '重置密码失败',
			'-3060': '未找到交易员信息',
			'-3061': '交易员登录密码错误',
			'-3062': '管理员密码错误',
			'-3063': '未找到管理员信息',
			'-3064': '不支持基金',
			'-3065': '没有找到基金账户',
			'-3066': '转账对方没有支付通道',
			'-3077': '银行帐号或身份证重复',
			'-3023':'未找到支付通道',
			'-3092':'系统正在清算中',
			'-4036': '结算输入参数无效',
			'-4037': '市场开市状态，请先收市再做结算',
			'-4038': '价格超过涨跌幅限制',
			'-4039': '未找到用户商品信息',
			'-4040': '登录密码错误',
			'-4041': '没有找到公告',
			'-4042': '账户类型不正确',
			'-4043': '单边账不存在或已处理',
			'-4044': '权限不够',
			'-4046': '对手信息转化出错',
			'-4047': '没找到相应的特别会员信息',
			'-4048': '计算错误',
			'-4049': '未找到用户持仓',
			'-4050': '没有足够的对手持仓下单',
			'-4051': '用户未激活，禁止此项操作',
			'-4052': '用户已注销',
			'-4053': '公告类型不正确',
			'-4054': '受限状态下不能超过受限净头寸',
			'-4055': '自动结算模式不能执行手工结算',
			'-4056': '市场开市状态，禁止加载',
			'-4057': '会员状态受限或冻结，禁止下单',
			'-4058': '系统仅支持买交割',
			'-4059': '账户已经绑定了微信号',
			'-4060': '账户没有需要数量的代金券 ',
			'-4061': '账户代金券数量不足够开仓 ',
			'-4062': '商品头寸已经存在',
			'-4063': '不支持此终端类型登录',
			'-4064': '手机号已经注册',
			'-4065': '节假日禁止签约，解约，出入金',
			'-4066': '未找到服务商',
			'-4067': '手机号码已经注册',
			'-4068': '用户已经注册',
			'-4069': '手机号码不能为空',
			'-4070': '证件号码不能为空',
			'-4071': '用户账号不能为空',
			'-4072': '用户名称不能为空',
			'-4073': '登录密码不能为空',
			'-4074': '不支持PC端注册',
			'-4075': '结算失败',
			'-4076': '该客户类型不允许转经纪人',
			'-4077': '客户转经纪人已申请',
			'-4078': '客户转经纪人申请失败',
			'-4079': '未找到经纪人',
			'-4082': '有资金不能解绑',
			'-4040': '帐号或密码错误',
			'-4080':'非默认主支付通道，不提供此业务支持',
			'-4085':'出入金服务没有连接成功',
			'-4091': '会员可下单手数出错',
			'-4092': '找不到所属会员用户记录',
			'-4093': '手机号码解密失败',
			'-4094': '红包信息有误，请重新核对后发送',
			'-4095': '相同红包序列号',
			'-4096': '未找到发送红包信息',
			'-4097': '红包已被抢完',
			'-4098': '超过当日最大可发金额',
			'-4099': '红包已领取',
			'-4101': '红包已过期',
			'-4102': '该卡已绑定,不能解除绑定',
			'-4103': '微信账号已注册',
			'-10002':'对手订单不足够',
			'-10006':'没有找到对手',
			'-10011':'超过涨跌幅限制',
			'-20012':'没有足够的持仓',
			'-20017':'认购量小于最小认购数量',
			'-20018':'禁止撤销认购单',
			'-20020':'认购量必须大于1',
			'-20022':'已经认购，不允许重复认购',
			'-20027':'商品没有上市',
			'-20029':'认购量超过最大认购数量',
			'-20032':'认购数量不足',
			'-20045':'商品不在申购期',
			'-20089':'等价委托已失效',
			'-20090':'总可认购数量不足，认购数量超过剩余可认购数量',
			'-20091':'客户可认购数量不足，认购数量超过账户可认购数量',
			'-20092':'请求商品代码错误',//抢购
			'-20094':'超过最大可抢购数量',
			'-20095':'抢购活动已结束',
			'-20096':'抢购活动还未开始',
			'-20097':'抢购活动已参与过',
			'-20100':'您的认购配额不足',
			1: 'cookie中无sessionid',
			2: '登录过期，请重新登录',//'redis中无session记录',
			3: 'url中无func_id',
			4: '错误的数据格式',//'错误的MSG_TYPE',
			5: '转发失败',
			6: 'protobuf解析失败',
			7: 'redis 链接错误',
			8: 'redis session延期失败',
			9: 'redis 执行命令失败',
			10: 'url中无用户code',
			11: 'url中无wxdomain名',
			'12': '请输入帐号',
			'13': '请输入密码',
			14: ' 把session放到redis中失败',
			15: '没有可用的redis server',
			16: 'curl初始化失败',
			17: 'curl执行http请求失败',
			18: 'curl返回失败',
			19: 'redis中无wxdomain',
			20: 'redis中wxdomain解析错误',
			21: '微信用户不存在',
			22: 'url中无用户微信ID',
			23: 'redis中取会员token失败',
			24: 'redis中取的token无应有字段',
			25: 'redis中取的token无效',
			26: 'cookie中无用户wxid',
			27: '用户请求传入的code无效',
			28: 'url中缺少必要参数',
			29: '暂不支持的功能',
			30: '未知错误',
			31: '图片验证码验证失败',
			32:'从redis提取图片验证码错误',
			33:'发送短信失败',
			34:'短信验证码验证失败',
			35:'从redis提取短信验证码错误',
			36:'json串解析失败',
			37:'商品种类未知',
			38:" 非法的数据",
			39:'时间格式错误',
			40:'短信验证码失效！',
			41:'没有关注公众号',
			42:'非法请求',//'http请求 head中没X-Requested-With',
            43:'验证码失效了',//redis无数据
            44:'验证码失效了'//redis中无临时session

		},
		preCt=$('#preMsg');
	return {
		Verify: Verify,
		cfg: {
			refreshTime: 500,//行情频率毫秒
			noPercent: true
		},
		lowHigh: function(s) {
			return s == 98 ? '涨' : '跌';
		},
		copyObj:function(o){
			var temp={};
			for(var i in o){
			   temp[i]=o[i];
			}
			return temp
		},
		queryToObj: function(str) {
			var obj = {},
				list = str.split('&'),
				kv;
			for(var i = 0; i < list.length; i++) {
				kv = list[i].split('=');
				obj[kv[0]] = $.trim(kv[1]);
			}
			return obj
		},
		arrayToObj:function(temp){
			var postData={},
			    node;
		    for(var i=0;i<temp.length;i++){
	           node=temp[i];
	           postData[node.name]=node.value;
	        }
	        return postData;
		},
		//获取url中的参数
        getUrlParam:function (name) {
            regstr = "/(\\?|\\&)" + name + "=([^\\&]+)/";
             reg = eval(regstr);//eval可以将 regstr字符串转换为 正则表达式
            result = window.location.href.match(reg);//匹配的结果是：result[0]=?sid=22 result[1]=sid result[2]=22。所以下面我们返回result[2]

             if (result && result[2]) {
                 return result[2];
             }else{
             	return null;
             }
        },
		isWxBrowser: function() {
			return /micromessenger/i.test(window.navigator.userAgent);
		},
		goBack: function() {
			var len = window.history.length;
			if(len) {
				history.go(-1);
			} else {
				window.location.hash = "#/";
			}
		},
		priceFormat: function(mindecimal, v) {
			return mindecimal ? (v / Math.pow(10, mindecimal) +0.001).toFixed(mindecimal) : parseInt(v);
		},
		unPriceFormat: function(mindecimal, v) {
			return mindecimal ? v*Math.pow(10,mindecimal) +0.001 : parseInt(v);
		},
		fpl: function(mindecimal,price,holdprice,holdamount,agreeunit){ //浮动盈亏 = (最新价-持仓价)/小数位*持仓数*商品合约单位
			var fpl = (price-holdprice)/Math.pow(10,mindecimal)*holdamount*agreeunit;
			return fpl;
		},
		networth:function(hold,price){ //单个商品市值=单个商品总持仓*当前行情价格
			return hold*price;
		},
		setTitle: function(t) {
			window.document.title = t;
		},

		url: function(fn) {
			var c = urls[fn];
			return ['/cgi-bin/zl_cgi?c=', c, '&f=', fn,'&t=',new Date().format('yyyyMMddhms')].join('');
		},
		loadMsg:function(html){
			preCt.html(html);
		},
		msg: function(s) {
			$("#message").show().html(s);
			if(this.msgTimer)clearTimeout(this.msgTimer);
			this.msgTimer = setTimeout('$("#message").fadeOut()', 1500);
		},
		dealErrorCode: function(code) {
			
			var error = errors[code];
			
			if(error) {
				this.msg(error);
			} else {
				this.msg('错误代码:' + code);
			}
		},
		getError: function(code) {
			var error = errors[code];
			return error ? error : code;
		},
		setCookie: function(c_name, value, expiredays) {
			var exdate = new Date()
			exdate.setDate(exdate.getDate() + expiredays)
			document.cookie = c_name + "=" + escape(value) +
				((expiredays == null) ? "" : ";expires=" + exdate.toGMTString())
		},
		//取回cookie
		getCookie: function(c_name) {
			var c_start, c_end;
			if(document.cookie.length > 0) {
				c_start = document.cookie.indexOf(c_name + "=")
				if(c_start != -1) {
					c_start = c_start + c_name.length + 1
					c_end = document.cookie.indexOf(";", c_start)
					if(c_end == -1) c_end = document.cookie.length
					return unescape(document.cookie.substring(c_start, c_end))
				}
			}
			return ""
		},
		accAdd:function(arg1, arg2) {

		    var r1, r2, m, c;
		    try {
		        r1 = arg1.toString().split(".")[1].length;
		    }
		    catch (e) {
		        r1 = 0;
		    }
		
		    try {
		        r2 = arg2.toString().split(".")[1].length;
		    }
		    catch (e) {
		        r2 = 0;
		    }
		
		    c = Math.abs(r1 - r2);
		    m = Math.pow(10, Math.max(r1, r2));
		    arg1 = Number(arg1.toString().replace(".", ""));
		    arg2 = Number(arg2.toString().replace(".", ""));
		    if (c > 0) {
		        var cm = Math.pow(10, c);
		        r1 > r2&&(arg2=arg2*cm)||(arg1=arg1*cm);
		    }
		    return (arg1 + arg2) / m;
		
		},
		subString: function(str, len, hasDot) {
			var newLength = 0;
			var newStr = "";
			var chineseRegex = /[^\x00-\xff]/g;
			var singleChar = "";
			var strLength = str.replace(chineseRegex, "**").length;
			for(var i = 0; i < strLength; i++) {
				singleChar = str.charAt(i).toString();
				if(singleChar.match(chineseRegex) != null) {
					newLength += 2;
				} else {
					newLength++;
				}
				if(newLength > len) {
					break;
				}
				newStr += singleChar;
			}

			if(hasDot && strLength > len) {
				newStr += "...";
			}
			return newStr;
		},
		isIdCardNo: function(num) {
			var factorArr = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1);
			var parityBit = new Array("1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2");
			var varArray = new Array();
			var intValue;
			var lngProduct = 0;
			var intCheckDigit;
			var intStrLen = num.length;
			var idNumber = num;
			// initialize
			if((intStrLen != 15) && (intStrLen != 18)) {
				return false;
			}
			// check and set value
			for(var i = 0; i < intStrLen; i++) {
				varArray[i] = idNumber.charAt(i);
				if((varArray[i] < '0' || varArray[i] > '9') && (i != 17)) {
					return false;
				} else if(i < 17) {
					varArray[i] = varArray[i] * factorArr[i];
				}
			}

			if(intStrLen == 18) {
				//check date
				var date8 = idNumber.substring(6, 14);
				if(this.isDate8(date8) == false) {
					return false;
				}
				// calculate the sum of the products
				for(i = 0; i < 17; i++) {
					lngProduct = lngProduct + varArray[i];
				}
				// calculate the check digit
				intCheckDigit = parityBit[lngProduct % 11];
				// check last digit
				if(varArray[17] != intCheckDigit) {
					return false;
				}
			} else { //length is 15
				//check date
				var date6 = idNumber.substring(6, 12);
				if(this.isDate6(date6) == false) {
					return false;
				}
			}
			return true;
		},
		isDate6: function(sDate) {//验证日期201701
			if(!/^[0-9]{6}$/.test(sDate)) {
				return false;
			}
			var year, month, day;
			year = sDate.substring(0, 4);
			month = sDate.substring(4, 6);
			if(year < 1700 || year > 2500)
				return false
			if(month < 1 || month > 12)
				return false
			return true
		},

		isDate8: function(sDate) {//验证日期20170103
			if(!/^[0-9]{8}$/.test(sDate)) {
				return false;
			}
			var year, month, day;
			year = sDate.substring(0, 4);
			month = sDate.substring(4, 6);
			day = sDate.substring(6, 8);
			var iaMonthDays = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
			if(year < 1700 || year > 2500)
				return false
			if(((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0))
				iaMonthDays[1] = 29;
			if(month < 1 || month > 12)
				return false
			if(day < 1 || day > iaMonthDays[month - 1])
				return false
			return true
		},
    	timeCountDown:function(d, o){//倒计时
    		
			var f = {
				zero: function(n){
					var n = parseInt(n, 10);
					if(n > 0){
						if(n <= 9){
							n = "0" + n;	
						}
						return String(n);
					}else{
						return "00";	
					}
				},
				dv: function(){
					d = d || Date.UTC(2050, 0, 1); //如果未定义时间，则我们设定倒计时日期是2050年1月1日
					var future = new Date(d), now = new Date();
					//现在将来秒差值
					var dur = Math.round((future.getTime() - now.getTime()) / 1000), pms = {
//					var dur = Math.round((future.getTime() - now.getTime()) / 1000) + future.getTimezoneOffset() * 60, pms = {
						sec: "00",
						mini: "00",
						hour: "00",
						day: "00",
						month: "00",
						year: "0"
					};
					if(dur > 0){
						pms.sec = f.zero(dur % 60);
						pms.mini = Math.floor((dur / 60)) > 0? f.zero(Math.floor((dur / 60)) % 60) : "00";
						pms.hour = Math.floor((dur / 3600)) > 0? f.zero(Math.floor((dur / 3600)) % 24) : "00";
						pms.day = Math.floor((dur / 86400)) > 0? f.zero(Math.floor((dur / 86400)) % 30) : "00";
						//月份，以实际平均每月秒数计算
						pms.month = Math.floor((dur / 2629744)) > 0? f.zero(Math.floor((dur / 2629744)) % 12) : "00";
						//年份，按按回归年365天5时48分46秒算
						pms.year = Math.floor((dur / 31556926)) > 0? Math.floor((dur / 31556926)) : "0";
					}

					if(pms.hour==='00' && pms.mini==='00' && pms.sec==='00'){// 是否到时刷新
						if(o.timeEndReload){
							location.reload();
							return;
						}
					}
					
					return pms;
				},
				ui: function(){
					if(jQuery){
						if(o.sec){
							o.sec.html(f.dv().sec);
						}
						if(o.mini){
							o.mini.html(f.dv().mini);
						}
						if(o.hour){
							o.hour.html(f.dv().hour);
						}
						if(o.day){
							o.day.html(f.dv().day);
						}
						if(o.month){
							o.month.html(f.dv().month);
						}
						if(o.year){
							o.year.html(f.dv().year);
						}
					}else{
						if(o.sec){
							o.sec.innerHTML = f.dv().sec;
						}
						if(o.mini){
							o.mini.innerHTML = f.dv().mini;
						}
						if(o.hour){
							o.hour.innerHTML = f.dv().hour;
						}
						if(o.day){
							o.day.innerHTML = f.dv().day;
						}
						if(o.month){
							o.month.innerHTML = f.dv().month;
						}
						if(o.year){
							o.year.innerHTML = f.dv().year;
						}
					}
					
					setTimeout(f.ui, 1000);
//					'function' == typeof cb && cb(timer,d);
				}
			};	
			f.ui();
		},
		getCanamount:function(o){ //可挂单数量计算
			var goods = o.goods,
				direct = o.direct,//买98，卖115
				hqprice = !isNaN(o.hqprice) ? parseFloat(this.priceFormat(goods.mindecimal,o.hqprice)) : 0,//行情
				holdamount = !isNaN(o.holdamount) ? o.holdamount : 0, //当前持仓数
				inprice = o.inprice ? parseFloat(o.inprice) : 0, //输入的应价/挂单价格
				balance = !isNaN(o.balance) ? parseFloat(o.balance) : 0;  // 用户可用资金
				
         	var mindecimal = goods.mindecimal, // 商品小数位
         		tradechargetype = goods.tradechargetype, //手续费类型：50固定，49比例
         		buyopencharge = goods.buyopencharge, //买入手续费比例
         		sellopencharge = goods.sellopencharge, //卖出手续费比例
         		maxperamount = goods.maxperamount, //最大交易数量
         		charge;//单笔手续费

     		// 计算单笔手续费
     		if(tradechargetype==50){//固定
     			if(direct==98){//买入
         			charge =  buyopencharge ;
     			}
     			else if(direct==115){//卖出
     				charge =  sellopencharge ;
     			} 
     		}
     		else if(tradechargetype==49){//比例
     			if(direct==98){//买入
         			charge = hqprice * buyopencharge / 100;
     			}
     			else if(direct==115){//卖出
     				charge = hqprice * sellopencharge / 100;
     			}
     		}
     		
     		balance = balance/100;
     		var v = Math.min(balance/(inprice+charge), maxperamount-holdamount);

     		return parseInt(v);
     		
  	    	// 可买数量=min{可用资金 userFund.balance/（应价价格form.price+单笔手续费），单账户最大持仓-已持仓数量}
  	    	// 应价可卖数量：当前商品持仓的可用数量
  	    	//可挂数量= min{可用资金 userFund.balance/（挂单价格 form.price+单笔手续费），单账户最大持仓 goods.maxperamount-已持仓数量}
  	    	//可挂数量=当前商品持仓的可用数量
			
  		},
		mobileType:function(){
			var ua = navigator.userAgent.toLowerCase();	
			if (/iphone|ipad|ipod/.test(ua)) {
				    return 'iphone';		
			} else if (/android/.test(ua)) {
				    return 'android';	
			}
		},
		isIPhone:function(){
			this.mobileType()=='iphone'?true:false;
		}
	}
})